package com.sqsf.service.impl;

import com.sqsf.dao.AccountDao;
import com.sqsf.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service("accountService")
//如果一个类中 拥有多个配置相同的事务需要处理 可以将注解定义在类上
//这样这个类中的所有方法都会按照指定的配置进行事务处理
//当然在此期间也可以单独为某一个方法进行注解书写 设置不同的事务属性
public class AccountServiceImpl implements AccountService {
    @Autowired
    private AccountDao accountDao;

    public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
    }

    @Override
    //@Transactional
    //事务注解 用于取代xml配置中切点表达式与对应的事务定义
    //当前注解所在的方法就是需要进行事务管理的方法 所以无需定义切点表达式匹配
    //可以通过对应的属性 定义事务的信息 隔离级别 传播属性 超时时间 是否只读
    @Transactional(isolation = Isolation.DEFAULT,propagation = Propagation.REQUIRED,timeout = -1,readOnly = false)
    public void zz(String out, String in, double money) {
        accountDao.updateSubMoneyByName(out,money);
        System.out.println(1/0);
        accountDao.updateAddMoneyByName(in,money);
    }
}